package com.shujia.scala

object Demo9Fun {
  def main(args: Array[String]): Unit = {
    /**
      * 高阶函数应用
      *
      */

    val arr = Array[Int](1, 2, 3, 4, 5, 6, 7, 8, 9)

    println(arr(0))

    //遍历数组
    for (i <- arr) {
      println(i)
    }

    println("=" * 100)

    def fun(i: Int): Unit = {
      println(i)
    }

    //将数组中的元素一个一个传递给fun
    arr.foreach(fun)


    arr.foreach(i => println(i))

    arr.foreach((i: Int) => println(i))

    println("=" * 100)

    // println  也是一个参数为any  没有返回值的函数  所以也可以直接传递给foreach
    arr.foreach(println)


    val arr1 = Array[String]("1", "2", "3", "4", "5")

    arr1.foreach(println)


    println("=" * 100)
    /**
      * map
      *
      */

    val arr2 = Array[Int](1, 2, 3, 4, 5, 6, 7, 8, 9)

    //将数组中每一个元素乘以2  返回一个新的数组

    var i = 0

    while (i < arr2.length) {

      arr2(i) = arr2(i) * 2

      i += 1
    }

    arr2.foreach(println)


    val arr3 = Array[Int](1, 2, 3, 4, 5, 6, 7, 8, 9)

    /**
      * map   将数组中的每一个元素传递给后面的函数  最后需要一个返回值   map执行完了之后返回新的数组
      *
      */

    val arr4 = arr3.map((i: Int) => i + 2)

    arr4.foreach(println)

    val arr5 = arr3.map((i: Int) => i / 2.0)


    println("=" * 100)
    //取出所有奇数
    val arr6 = Array[Int](1, 2, 3, 4, 5, 6, 7, 8, 9)



    //链式调用
    arr6.filter((i: Int) => i % 2 == 1).foreach(println)

    /**
      *
      *
      * foreach  遍历集合  将集合中每个元素传递给后面的函数
      *
      * map   处理集合中的数据    将集合中的元素传递给后面的函数   传入一行返回一行
      *
      * filter   过滤集合   如果函数返回true 保留元素 如果返回false 过滤元素
      *
      */


  }

}
